package javachongkao.面向对象下.设计圆和圆柱体;

import java.util.Scanner;
//7-19 设计圆和圆柱体
//编写一个完整的Java Application 程序。包含类Circle、Cylinder、Main，具体要求如下。
//
//（1）编写类Circle，表示圆形对象，包含以下成员
//①属性：
//1)  radius：私有，double型，圆形半径；
//②方法：
//1)  Circle(double radius), 构造方法,用参数设置圆的半径
//2)  Circle(),构造方法，将圆形初始化为半径为0。
//3)  void setRadius(double r)：用参数r设置radius的值
//4)  double getRadius()：返回radius的值
//5)  double getArea()，返回圆形的面积
//6)  double getPerimeter()，返回圆形的周长
//7)  public String toString( )，将把当前圆对象的转换成字符串形式，例如圆半径为10.0，返回字符串"Circle(r:10.0)"。
//（2）编写一个类Cylinder，表示圆柱形对象，包含以下成员
//①属性：
//1)  height：私有，double型，圆柱体高度；
//2)  circle：私有，Circle类型，圆柱体底面的圆形；
//②方法：
//1)  Cylinder(double height，Circle circle), 构造方法,用参数设置圆柱体的高度和底面的圆形
//2)  Cylinder(),构造方法，将圆柱体的高度初始化为0，底面圆形初始化为一个半径为0的圆形。
//3)  void setHeight(double height)：用参数height设置圆柱体的高度
//4)  double getHeight()：返回圆柱体的高度
//5)  void setCircle(Circle circle)：用参数circle设置圆柱体底面的圆形
//6)  Circle getCircle()：返回圆柱体底面的圆形
//7)  double getArea()，重写Circle类中的area方法，返回圆柱体的表面积
//8)  double getVolume()，返回圆柱体的体积
//9)  public String toString( )，将把当前圆柱体对象的转换成字符串形式，例如半径为10.0，高为5.0，返回字符串"Cylinder(h:5.0,Circle(r:10.0))"。
//（3）编写公共类Main,在main()方法中实现如下功能
//输入一个整数n，表示有n个几何图形。
//对于每一个几何图形，先输入一个字符串，“Circle”表示圆形，“Cylinder”表示圆柱体。
//如果是圆形，输入一个浮点数表示其半径。要求计算其面积和周长并输出。
//如果是圆柱体，输入两个浮点数分别表示其半径和高度。要求计算其面积和体积并输出。
//
//将以下代码附在自己的代码后面：
//
//public class Main{
//    public static void main(String args[]) {
//        Scanner input = new Scanner(System.in);
//        int n = input.nextInt();
//        for(int i = 0; i < n; i++) {
//            String str = input.next();
//            if(str.equals("Circle")) {
//                Circle c = new Circle(input.nextDouble());
//                System.out.println("The area of " + c.toString() + " is " + String.format("%.2f",c.getArea()));
//                System.out.println("The perimeterof " + c.toString() + " is "+ String.format("%.2f",c.getPerimeter()));
//            } else if(str.equals("Cylinder")) {
//                Cylinder r = new Cylinder(input.nextDouble(), new Circle(input.nextDouble()));
//                System.out.println("The area of " + r.toString() + " is " + String.format("%.2f",r.getArea()));
//                System.out.println("The volume of " + r.toString() + " is " + String.format("%.2f",r.getVolume()));
//            }
//        }
//    }
//}
//输入格式:
//第一行输入一个整数n，表示有n个几何图形。
//以下有n行，每行输入一个几何图形的数据。
//每行先输入一个字符串表示几何图形的类型，“Circle”表示圆形，“Cylinder”表示圆柱体。
//如果是圆形，输入一个浮点数表示其半径。
//如果是圆柱体，输入两个浮点数分别表示其半径和高度。
//输出格式:
//如果是圆形，要求计算其面积和周长并输出。
//如果是圆柱体，要求计算其面积和体积并输出。
//注意，圆周率用Math.PI

class Circle {
    private double radius;

    // 构造方法
    public Circle(double radius) {
        this.radius = radius;
    }

    public Circle() {
        this(0.0);
    }

    // setter和getter方法
    public void setRadius(double r) {
        this.radius = r;
    }

    public double getRadius() {
        return radius;
    }

    // 计算面积
    public double getArea() {
        return Math.PI * radius * radius;
    }

    // 计算周长
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }

    // 转换为字符串
    @Override
    public String toString() {
        return String.format("Circle(r:%.1f)", radius);
    }
}

class Cylinder {
    private double height;
    private Circle circle;

    // 构造方法
    public Cylinder(double height, Circle circle) {
        this.height = height;
        this.circle = circle;
    }

    public Cylinder() {
        this(0.0, new Circle());
    }

    // setter和getter方法
    public void setHeight(double height) {
        this.height = height;
    }

    public double getHeight() {
        return height;
    }

    public void setCircle(Circle circle) {
        this.circle = circle;
    }

    public Circle getCircle() {
        return circle;
    }

    // 计算表面积
    public double getArea() {
        return 2 * circle.getArea() + circle.getPerimeter() * height;
    }

    // 计算体积
    public double getVolume() {
        return circle.getArea() * height;
    }

    // 转换为字符串
    @Override
    public String toString() {
        return String.format("Cylinder(h:%.1f,%s)", height, circle.toString());
    }
}

public class Main {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        for (int i = 0; i < n; i++) {
            String str = input.next();
            if (str.equals("Circle")) {
                Circle c = new Circle(input.nextDouble());
                System.out.println("The area of " + c.toString() + " is " + String.format("%.2f", c.getArea()));
                System.out.println("The perimeterof " + c.toString() + " is " + String.format("%.2f", c.getPerimeter()));
            } else if (str.equals("Cylinder")) {
                Cylinder r = new Cylinder(input.nextDouble(), new Circle(input.nextDouble()));
                System.out.println("The area of " + r.toString() + " is " + String.format("%.2f", r.getArea()));
                System.out.println("The volume of " + r.toString() + " is " + String.format("%.2f", r.getVolume()));
            }
        }
    }
}
